package com.bird.system.service;

import com.bird.system.domain.entity.SysUserEntity;
import com.bird.system.domain.params.SysUserQueryParams;
import com.bird.system.domain.params.SysUserUpdateParams;

import java.util.List;

/**
 * 用户 业务层
 *
 * @author bird
 */
public interface ISysUserService extends IBaseService<SysUserEntity> {
	/**
	 * 根据条件分页查询用户列表
	 *
	 * @param user 用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> selectUserList(SysUserQueryParams user);

	/**
	 * 通过用户名查询用户
	 *
	 * @param userName 用户名
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserByUserName(String userName);

	/**
	 * 通过用户ID查询用户
	 *
	 * @param userId 用户ID
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserById(Long userId);

	/**
	 * 通过用户ID查询用户
	 *
	 * @param userId 用户ID
	 * @return 用户对象信息
	 */
	public String selectUserNameById(Long userId);

	/**
	 * 根据用户ID查询用户所属角色组
	 *
	 * @param userName 用户名
	 * @return 结果
	 */
	public String selectUserRoleGroup(String userName);

	/**
	 * 根据用户ID查询用户所属岗位组
	 *
	 * @param userName 用户名
	 * @return 结果
	 */
	public String selectUserPostGroup(String userName);

	/**
	 * 校验用户名称是否唯一
	 *
	 * @param userName 用户名称
	 * @return 结果
	 */
	public String checkUserNameUnique(String userName);

	/**
	 * 校验手机号码是否唯一
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public String checkPhoneUnique(SysUserUpdateParams user);

	/**
	 * 校验email是否唯一
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public String checkEmailUnique(SysUserUpdateParams user);

	/**
	 * 校验用户是否允许操作
	 *
	 * @param user 用户信息
	 */
	public void checkUserAllowed(SysUserUpdateParams user);

	/**
	 * 新增用户信息
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public int insertUser(SysUserEntity user);

	/**
	 * 修改用户信息
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public int updateUser(SysUserEntity user);

	/**
	 * 修改用户状态
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public int updateUserStatus(SysUserEntity user);

	/**
	 * 修改用户基本信息
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public int updateUserProfile(SysUserEntity user);

	/**
	 * 修改用户头像
	 *
	 * @param userName 用户名
	 * @param avatar   头像地址
	 * @return 结果
	 */
	public boolean updateUserAvatar(String userName, String avatar);

	/**
	 * 重置用户密码
	 *
	 * @param user 用户信息
	 * @return 结果
	 */
	public int resetPwd(SysUserEntity user);

	/**
	 * 重置用户密码
	 *
	 * @param userName 用户名
	 * @param password 密码
	 * @return 结果
	 */
	public int resetUserPwd(String userName, String password);

	/**
	 * 通过用户ID删除用户
	 *
	 * @param userId 用户ID
	 * @return 结果
	 */
	public int deleteUserById(Long userId);

	/**
	 * 批量删除用户信息
	 *
	 * @param userIds 需要删除的用户ID
	 * @return 结果
	 */
	public int deleteUserByIds(Long[] userIds);
}
